/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.lista05;

import java.util.Hashtable;
import java.util.Scanner;
import java.util.Properties;
/**
 *
 * @author mendel
 */
public class InterAgenda {
    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);
        Object tarefas = null;
        Repositorio agenda = null;
        
        Properties parameters = new Properties();
        try 
        {
            parameters.load(InterAgenda.class.getResourceAsStream("colecao.properties"));
        } 
        catch (Exception e) 
        {
            System.out.println("ERRO:" + e.getStackTrace());
        }
        int colecao = Integer.parseInt(parameters.getProperty("colecao"));
        int tipoBanco = Integer.parseInt(parameters.getProperty("tipoBanco"));
        
        System.out.println("INICIO DO PROGRAMA.");
        switch(colecao)
        {
            case 1:
            {
                agenda = new Agenda();
                System.out.println("A ESTRUTURA ESCOLHIDA FOI ARRAY.");
                System.out.println("Digite a quantidade de Tarefas que você pode criar.");
                int qtdTarefas = s.nextInt();
                if(qtdTarefas > 0)
                {
                    tarefas = new Tarefa[qtdTarefas];
                    break;
                }
                else
                {
                    System.out.println("O programa não pode ser executado pois não há espaço para cadastrar as Tarefas.");
                    System.out.println("Favor, inicie novamente o sistema.");
                    return;
                }
            }
            case 2: 
            {
                agenda = new AgendaVector();
                System.out.println("A ESTRUTURA ESCOLHIDA FOI VECTOR.");
        	break;
            } 
            case 3: 
            {
                agenda = new AgendaHash(); 
                System.out.println("A ESTRUTURA ESCOLHIDA FOI HASHTABLE.");
        	break;
            }    
        }
        
        boolean continuar = true;
        int opcao;
                
        while(continuar)
        {
            System.out.println("\n##############  MENU  ################");
            System.out.println("1 - CADASTRAR UMA TAREFA");
            System.out.println("2 - REMOVER UMA TAREFA");
            System.out.println("3 - CONSULTAR OS DADOS DE UMA TAREFA");
            System.out.println("4 - INICIAR UMA TAREFA");
            System.out.println("5 - ENCERRAR UMA TAREFA");
            System.out.println("6 - LISTAR AS TAREFAS CADASTRADAS");
            System.out.println("7 - INCREMENTAR OU DECREMENTAR A IMPORTANCIA DE UMA TAREFA");
            System.out.println("8 - CANCELAR TAREFA");
            System.out.println("9 - REINICIAR TAREFA");
            System.out.println("10 - SAIR");
            System.out.println("#######################################");
            System.out.println("\nDigite a opção que você deseja:");
            opcao = s.nextInt();
            switch (opcao) 
            {
                case 1: 
                {   
                    try 
                    {
                        System.out.println("Escolha uma dos 3 seguintes tipos, para o cadastro de Tarefas:");
                        System.out.println("1) TAREFA GERENCIAL.");
                        System.out.println("2) TAREFA DESENVOLVIMENTO.");
                        System.out.println("3) TAREFA DESENVOLVIMENTO AUTO.");
                        int opcaoTipoTarefa = s.nextInt();
                        System.out.println("Os dados podem ser nas seguintes ordens:");
                        System.out.println("1) Código, descrição, data, duração e local.");
                        System.out.println("2) Código, descrição, data, duração, local, importancia, urgencia e valor da hora.");
                        System.out.println("Digite a opção de criação da Tarefa, 1 ou 2.");
                        int opcaoTarefa = s.nextInt();
                        System.out.println("Digite as informações na sequencia escolhida:");
                        boolean retorno = agenda.cadastrarTarefa(opcaoTipoTarefa, opcaoTarefa);
                        if(retorno)
                        {
                            System.out.println("A Tarefa foi cadastrada com sucesso.");
                        }
                        
                    } 
                    catch (LotadoException ex) 
                    {
                        System.out.println(ex.getMessage());
                    } 
                    catch (ImportanciaException ex) 
                    {
                        System.out.println(ex.getMessage());
                    }
                    continue;
                }
                case 2: 
                {
                    try 
                    {
                        System.out.println("Digite o código da Tarefa que você quer remover.");
                        int codigo = s.nextInt();
                        boolean retorno = agenda.removerTarefa(codigo);
                        if(retorno)
                        {
                            System.out.println("A Tarefa foi removida com sucesso.");   
                        }
                        else
                        {
                            System.out.println("Não existe nenhuma Tarefa cadastrada com o codigo passado.");
                        }
                                             
                    } 
                    catch (SemTarefaException ex) 
                    {
                        System.out.println(ex.getMessage());
                    }
                    continue;
                }
                case 3: 
                {
                    try 
                    {
                        System.out.println("Digite o codigo da Tarefa a ser consultada.");
                        int codigo = s.nextInt();
                        TarefaTO retorno = agenda.consultarTarefa(codigo);
                        if (retorno != null) 
                        {
                            System.out.println("################# DESCRIÇÃO DA TAREFA ##################");
                            System.out.println("Código: " + retorno.getCodigo());
                            System.out.println("Descrição: " + retorno.getDescricao());
                            System.out.println("Data: " + retorno.getData());
                            System.out.println("Hora de início: " + retorno.getHoraInicio());
                            System.out.println("Duração: " + retorno.getDuracao());
                            System.out.println("Local: " + retorno.getLocal());
                            System.out.println("Importância: " + retorno.getImportancia());
                            System.out.println("Urgência: " + retorno.getUrgencia());
                            System.out.println("Valor da hora: " + retorno.getValorHora());
                            System.out.println("Valor cobrado: " + retorno.getValorCobrado());
                            System.out.println("Status: " + retorno.getStatus());
                            System.out.println("Consulta realizada com sucesso.");
                        } 
                        else 
                        {
                            System.out.println("Não existe nenhuma Tarefa cadastrada com o codigo passado.");
                        }                        
                    } 
                    catch (SemTarefaException ex) 
                    {
                        System.out.println(ex.getMessage());
                    }
                    continue;
                }
                case 4: 
                {
                    try 
                    {
                        System.out.println("Digite o codigo da Tarefa a ser iniciada.");
                        int codigo = s.nextInt();
                        boolean retorno = agenda.iniciarTarefa(codigo);
                        if (retorno) 
                        {
                            System.out.println("A tarefa foi iniciada com sucesso.");
                        } 
                        else 
                        {
                            System.out.println("Não existe nenhuma Tarefa cadastrada com o codigo passado.");
                        }
                        
                    } 
                    catch (SemTarefaException ex) 
                    {
                        System.out.println(ex.getMessage());
                    }
                    continue;
                }
                case 5: 
                {                    
                    try 
                    {
                        System.out.println("Digite o codigo da Tarefa a ser encerrada.");
                        int codigo = s.nextInt();
                        System.out.println("Digite o valor cobrado para a tarefa.");
                        double wValorCobrado = s.nextDouble();
                        boolean retorno = agenda.encerrarTarefa(codigo, wValorCobrado);
                        if (retorno) 
                        {
                            System.out.println("A tarefa foi encerrada com sucesso.");
                        } 
                        else 
                        {
                            System.out.println("Não existe nenhuma Tarefa cadastrada com o codigo passado.");
                        }
                        
                    } 
                    catch (SemTarefaException ex) 
                    {
                        System.out.println(ex.getMessage());
                    }
                    continue;
                }
                case 6: 
                {                      
                    TarefaTO[] retorno = agenda.listarTarefa();
                    if(retorno != null)
                    {
                        System.out.println("As Tarefas cadastradas são:");
                        for (int i = 0; i < retorno.length; i++) 
                        {
                            if (retorno[i] != null) 
                            {
                                System.out.println(" DESCRIÇÃO DA TAREFA " + retorno[i].getCodigo());
                                System.out.println("Código: " + retorno[i].getCodigo());
                                System.out.println("Descrição: " + retorno[i].getDescricao());
                                System.out.println("Data: " + retorno[i].getData());
                                System.out.println("Hora de inicio: " + retorno[i].getHoraInicio());
                                System.out.println("Duração: " + retorno[i].getDuracao());
                                System.out.println("Importância: " + retorno[i].getImportancia());
                                System.out.println("##########################");
                                break;
                            }
                            continue;
                        }
                    }
                    else
                    {
                        System.out.println("###OBS.: Ainda não há tarefas cadastradas.");
                    }                    
                    continue;
                }
                case 7: 
                {
                    try 
                    {
                        System.out.println("Digite o codigo da Tarefa a ser alterada.");
                        int codigo = s.nextInt();
                        System.out.println("--> Se você pretende incrementar digite 1.");
                        System.out.println("--> Ou se você pretende decrementar digite 2.");
                        int wOpcao = s.nextInt();
                        boolean retorno = agenda.alterarImportancia(codigo, wOpcao);
                        if (retorno) 
                        {
                            System.out.println("A Tarefa foi alterada com sucesso.");
                        } 
                        else 
                        {
                            System.out.println("Não existe nenhuma Tarefa cadastrada com o codigo passado.");
                        }
                        continue;
                    } 
                    catch (SemTarefaException ex) 
                    {
                        System.out.println(ex.getMessage());
                    }
                }
                case 8: 
                {
                    try 
                    {
                        System.out.println("Digite o codigo da Tarefa a ser alterada.");
                        int codigo = s.nextInt();
                        boolean retorno = agenda.cancelarTarefa(codigo);
                        if (retorno) 
                        {
                            System.out.println("A Tarefa foi alterada com sucesso.");
                        } 
                        else 
                        {
                            System.out.println("Não existe nenhuma Tarefa cadastrada com o codigo passado.");
                        }
                        continue;
                    } 
                    catch (SemTarefaException ex) 
                    {
                        System.out.println(ex.getMessage());
                    }
                }
                case 9: 
                {
                    if (agenda instanceof Agenda) {
                        try 
                        {
                            Agenda agendaAux = new Agenda();
                            agendaAux = (Agenda) agenda;
                            System.out.println("Digite o codigo da Tarefa a ser alterada:");
                            int codigo = s.nextInt();
                            boolean retorno = agendaAux.reiniciarTarefa(codigo);
                            if (retorno) 
                            {
                                System.out.println("A Tarefa foi alterada com sucesso.");
                            } 
                            else 
                            {
                                System.out.println("Não existe nenhuma Tarefa cadastrada com o codigo passado.");
                            }
                        } 
                        catch (SemTarefaException ex) 
                        {
                            System.out.println(ex.getMessage());
                        } 
                        catch (SemMetodoException ex) 
                        {
                            System.out.println(ex.getMessage());
                        }
                        continue;
                    }
                    else if(agenda instanceof AgendaHash)
                    {
                        try 
                        {
                            AgendaHash agendaAux = new AgendaHash();
                            agendaAux = (AgendaHash) agenda;
                            System.out.println("Digite o codigo da Tarefa a ser alterada:");
                            int codigo = s.nextInt();
                            boolean retorno = agendaAux.reiniciarTarefa(codigo);
                            if (retorno) 
                            {
                                System.out.println("A Tarefa foi alterada com sucesso.");
                            } 
                            else 
                            {
                                System.out.println("Não existe nenhuma Tarefa cadastrada com o codigo passado.");
                            }
                            continue;
                        } 
                        catch (SemTarefaException ex) 
                        {
                            System.out.println(ex.getMessage());
                        } 
                        catch (SemMetodoException ex) 
                        {
                            System.out.println(ex.getMessage());
                        }
                    }
                    else if(agenda instanceof AgendaVector)
                    {
                        try 
                        {
                            AgendaVector agendaAux = new AgendaVector();
                            agendaAux = (AgendaVector) agenda;
                            System.out.println("Digite o codigo da Tarefa a ser alterada:");
                            int codigo = s.nextInt();
                            boolean retorno = agendaAux.reiniciarTarefa(codigo);
                            if (retorno) 
                            {
                                System.out.println("A Tarefa foi alterada com sucesso.");
                            } 
                            else 
                            {
                                System.out.println("Não existe nenhuma Tarefa cadastrada com o codigo passado.");
                            }
                            continue;
                        } 
                        catch (SemTarefaException ex) 
                        {
                            System.out.println(ex.getMessage());
                        } 
                        catch (SemMetodoException ex) 
                        {
                            System.out.println(ex.getMessage());
                        }
                    }
                }
                case 10: 
                {
                    System.out.println("O programa foi finalizado com sucesso.");
                    continuar = false;
                    break;
                }
            } 
        }
    }
}